/**
 * 地块类型
 */
export enum TildeType {
    /**平地 */
    flat = 0,
    /**山丘 */
    hill = 1,
    /**河流 */
    river = 2,

    /** 黄金 */
    gold = 11,
    /** 能源 */
    energy = 12,
    /** 木材 */
    wood = 13,
    /** 石材 */
    stone = 14,
}

/**
 * 实体类型
 */
export enum EntityType {
    /**单位 */
    unit = 0,
    /**建筑 */
    building = 1,
    /**地形 */
    terrain = 2,
}

/**
 * 单位类型
 */
export enum UnitType {
    /**士兵 */
    soldier = 0,
    /**采集兵 */
    collect = 1,
    /**治疗兵 */
    doctor = 2,
    /**弓箭手 */
    archer = 3,
    /**建造兵 */
    worker = 4,
}

/**
 * 建筑类型
 */
export enum BuildingType {
    /**基地 */
    base = 0,
    /**防御塔 */
    tower = 1,
    /**城墙 */
    wall = 2,
}

/**
 * 战斗状态
 */
export enum BattleStatus {
    /**初始化 */
    init = 'init',
    /**运行中 */
    running = 'running',
    /**结束 */
    end = 'end',
}

/**
 * 命令类型
 */
export enum CommandType {
    /**初始化战场 */
    init = 'init',
    /**结束*/
    end = 'end',

    /**移动 */
    move = 'move',
    /**攻击 */
    attack = 'attack',
    /**建造 */
    build = 'build',
    /**生产 */
    swap = 'swap',
    /**治疗 */
    heal = 'heal',
    /**采集 */
    collect = 'collect',
}

/**
 * 事件类型
 */
export enum EventType {
    /**内部系统异常 */
    SystemError = '系统异常',
    /**执行战斗命令 */
    BattleRunCMD = '执行战斗命令',
    /**服务器消息 */
    Server = '服务器消息',
}

/**
 * 方向枚举类型
 */
export enum DirectionType {
    UP,
    RIGHT,
    DOWN,
    LEFT,
}

/**
 * 玩家类型
 */
export enum PlayerType {
    /**玩家1 */
    PLAYER1 = 'player1',
    /**玩家2 */
    PLAYER2 = 'player2',
    /**管理员 */
    ADMIN = 'admin',
}

/**
 * 客户端地图地块类型
 */
export enum ClientTildeType {
    /**平地 */
    flat = 0,
    /**山丘 */
    hill = 1,
    /**河流 */
    river = 2,

    /** 黄金 */
    gold = 11,
    /** 能源 */
    energy = 12,
    /** 木材 */
    wood = 13,
    /** 石材 */
    stone = 14,

    /**士兵 */
    soldier = 21,
    /**采集*/
    collect = 22,
    /**治疗兵 */
    doctor = 23,
    /**弓箭手 */
    archer = 24,
    /**建造兵 */
    worker = 25,

    /**基地 */
    base = 31,
    /**防御塔 */
    tower = 32,
    /**城墙 */
    wall = 33,

}

/**
 * 地图图层枚举类型转换
 */
export function getClientTildeType(type: TildeType | UnitType | BuildingType, utype: EntityType): ClientTildeType {
    switch (utype) {
        case EntityType.terrain:
            switch (type as TildeType) {
                case TildeType.flat:
                    return ClientTildeType.flat;
                case TildeType.hill:
                    return ClientTildeType.hill;
                case TildeType.river:
                    return ClientTildeType.river;
                case TildeType.energy:
                    return ClientTildeType.energy;
                case TildeType.wood:
                    return ClientTildeType.wood;
                case TildeType.stone:
                    return ClientTildeType.stone;
                case TildeType.gold:
                    return ClientTildeType.gold;
                default:
                    throw new Error(`未知地形类型: ${type}`);
            }
        case EntityType.unit:
            switch (type as UnitType) {
                case UnitType.soldier:
                    return ClientTildeType.soldier;
                case UnitType.collect:
                    return ClientTildeType.collect;
                case UnitType.doctor:
                    return ClientTildeType.doctor;
                case UnitType.archer:
                    return ClientTildeType.archer;
                case UnitType.worker:
                    return ClientTildeType.worker;
                default:
                    throw new Error(`未知单位类型: ${type}`);
            }
        case EntityType.building:
            switch (type as BuildingType) {
                case BuildingType.base:
                    return ClientTildeType.base;
                case BuildingType.tower:
                    return ClientTildeType.tower;
                case BuildingType.wall:
                    return ClientTildeType.wall;
                default:
                    throw new Error(`未知建筑类型: ${type}`);
            }
        default:
            throw new Error(`未知实体类型: ${utype}`);
    }
}

/**
 * 地图图层枚举类型
 */
export enum MapLayersType {
    plain = 'plain', // 平地
    mountains = 'mountains', // 墙
    soldierA = 'soldierA', // A士兵ID
    soldierB = 'soldierB', // B士兵ID
    baseA = 'baseA', // A基地瓦片ID
    baseB = 'baseB', // B基地瓦片ID
    towerA = 'towerA', // A防御塔瓦片ID
    towerB = 'towerB', // B防御塔瓦片ID
}

export type MapSettingsType = {
    basePosition: [{ x: number; y: number }, { x: number; y: number }];
    playerColors: [string, string];
};
